home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 18 / 64er_Magazin_Sonderheft_18_19xx_Markt__Technik_de_Side_A.d64 / MPS 802 Ext.SRC. (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  8KB  |  311 lines

  1. 3 sys9*4096
  2. 5 .opt oo
  3. 10 in = $ee83;zeichen vom seriellen port lesen
  4. 20 out = $f35f;zeichen in ausgabepuffer
  5. 30 end = $ee66;sa bearbeitung beenden
  6. 40 port = $0240;memory manager
  7. 45 ;******** original betriebssystem *******
  8. 50 *= $4400 ; zeichensatz aendern
  9. 51 .byte $3c,$40,$8c,$92,$9e,$42,$3c,$00;klammeraffe
  10. 52 *= $4858
  11. 53 .byte $fe,$08,$14,$22,$00,$00,$00,$00;kleines k
  12. 60 *= $4a79;rom check umgehen
  13. 61 bne z1
  14. 62 z1 inc $00
  15. 70 *= $4ab1;memory management
  16. 71 lda #$01;bit 0 setzen ohne speicherverteilung
  17. 72 jsr z9;zu aendern
  18. 73 jsr $ec61;initialisieren der ports
  19. 80 *= $5b02;memory management
  20. 81 lda port;low impuls von 12 taktzyklen
  21. 82 and #$fe; auf bit 0 legen ohne speicher
  22. 83 sta port; verteilung zu aendern
  23. 84 ora #$01
  24. 85 jsr z2
  25. 90 *= $5d01;*** memory management ***
  26. 91 z9 ora port
  27. 92 z2 sta port
  28. 93 rts
  29. 100 ;******** spezial betriebssystem *******
  30. 101 *= $6400 ; zeichensatz aendern
  31. 110 .byte $3c,$40,$8c,$92,$9e,$42,$3c,$00;klammeraffe
  32. 120 *= $6858
  33. 130 .byte $fe,$08,$14,$22,$00,$00,$00,$00;kleines k
  34. 150 *= $6a79;rom check umgehen
  35. 160 bne i1
  36. 170 i1 inc $00
  37. 200 *= $6ab1;memory management
  38. 210 lda #$01;bit 0 setzen ohne speicherverteilung
  39. 220 jsr j9;zu aendern
  40. 230 jsr $ec61;initialisieren der ports
  41. 300 *= $6bbe;rev 7x
  42. 310 .byte $37,$58
  43. 400 *= $6d2c;anzahl der zulaessigen sa
  44. 410 .byte $10
  45. 500 *= $6d3d;sa tabelle
  46. 510 .word j2-1,$edb8,$edbb,$edf2,$ee00
  47. 520 .word $ee09,$ee22,$ee29,j3-1,$ee41
  48. 530 .word $ee4a,j4-1,j5-1,$ee35,j6-1,j7-1
  49. 600 *= $6d69;abfrage auf neue steuerzeichen
  50. 610 jsr j1
  51. 700 *= $6e36;sa 13 speicherverteilung festlegen
  52. 710 lda $64;code holen
  53. 720 ora #01;bit 0 muss gesetzt bleiben
  54. 730 nop
  55. 740 nop
  56. 750 sta port;selektion gueltig
  57. 760 jmp end;muss unbedingt hier stehen
  58. 800 *= $7660;paperfeed routine
  59. 810 jmp j8;zur erweiterung
  60. 820 nop
  61. 900 *= $7b02;memory management
  62. 910 lda port;low impuls von 12 taktzyklen
  63. 920 and #$fe; auf bit 0 legen ohne speicher
  64. 930 sta port; verteilung zu aendern
  65. 940 ora #$01
  66. 950 jsr a1
  67. 1000 *= $7d01;*** memory management ***
  68. 1010 j9 ora port
  69. 1020 a1 sta port
  70. 1030 rts
  71. 1100 ;*** paperfeed ***
  72. 1110 j8 lda $60;paging off
  73. 1120 bmi b1;ja, dann neue routine
  74. 1130 jmp $f664;sonst wie gehabt
  75. 1140 b1 lda #$ff;vorschub von 255 zeilen anstossen
  76. 1150 jsr $f646
  77. 1160 lda #$08
  78. 1170 b2 bit $0280;paperfeedtaste gedrueckt
  79. 1180 beq b2;ja, dann weiter warten
  80. 1190 lda #$00;sonst motor abwuergen
  81. 1200 sta $92
  82. 1210 rts
  83. 1300 ;*** anfang von sa0 ***
  84. 1310 j2 lda $64;wie bisher, musste nur platz
  85. 1320 bit $0202;fuer sa-tabellenerweiterung machen
  86. 1330 bpl c1
  87. 1340 ldy #$00
  88. 1350 sty $87
  89. 1360 c1 jmp $ed5e
  90. 1400 ;*** sa8 weil dort jetzt sa13 ***
  91. 1410 j3 bit $0202
  92. 1420 bmi d1
  93. 1430 lda #$00
  94. 1440 sta $87
  95. 1450 d1 jmp end
  96. 1500 ;*** sa11 rom ins ram ***
  97. 1510 j4 ldy #$00;kopieren von e400 bis ffff
  98. 1520 sty $80; lowbyte
  99. 1530 lda #$e4
  100. 1540 sta $81; highbyte
  101. 1550 e1 lda ($80),y;rom lesen
  102. 1560 sta ($80),y;in ram schreiben, umschaltung durch
  103. 1570 iny;     memory manager
  104. 1580 bne e1
  105. 1590 inc $81
  106. 1600 bne e1
  107. 1610 beq d1
  108. 1700 ;*** sa12 in ram schreiben ***
  109. 1710 j5 lda $64;lowbyte der anfangsadresse holen
  110. 1720 sta $7e
  111. 1730 jsr in;highbyte holen
  112. 1740 bvs f1;schon andere sa   ja, dann fehler
  113. 1750 lda $64
  114. 1760 sta $7f
  115. 1770 f3 jsr in;zeichen lesen
  116. 1780 bvs f2;ende, wenn neue sa kommt
  117. 1790 lda $64
  118. 1800 ldx #$00
  119. 1810 sta ($7e,x);zeichen in ram
  120. 1820 inc $7e
  121. 1830 bne f3;naechstes zeichen
  122. 1840 inc $7f
  123. 1850 bne f3;naechstes zeichen
  124. 1860 jmp $ed23;ramtop erreicht, ende
  125. 1870 f1 jmp $ee80;terminator error
  126. 1880 f2 jmp $ed26;regulaeres ende
  127. 3000 ;*** sa14 8bit graphik ***
  128. 3010 j6 lda port
  129. 3020 and #$ef
  130. 3030 sta port;ram im zeichensatzbereich einschalten
  131. 3040 lda #$12
  132. 3050 sta $e9fe;graphikendeanforderung ruecksetzen
  133. 3070 k1 lda $64;zeichen laden
  134. 3080 jsr h3;und der graphikroutine ueberreichen
  135. 3130 k2 jsr in;naechstes zeichen abholen
  136. 3140 bvc k1;neue sa       nein, dann weiter graphik
  137. 3160 ldy #$8d;sonst letzte zeile drucken
  138. 3170 jsr h6
  139. 3180 k3 lda $7a;schon auf papier
  140. 3190 bne k3;nein, dann warten
  141. 3200 lda port;sonst rom zeichensatz einschalten
  142. 3210 ora #$10
  143. 3220 sta port
  144. 3280 jmp $ed26;ende
  145. 4000 ;*** 7bit-graphik  chr$(8) ***
  146. 4010 j1 cmp #$08;chr$(8) = graphik ein empfangen
  147. 4020 bne h1;nein dann weiter untersuchen
  148. 4030 lda port;sonst ram im zeichensatzbereich ein
  149. 4040 and #$ef
  150. 4050 sta port
  151. 4052 lda #$00;skip space im ram loeschen
  152. 4054 ldx #$07;     damit tabulatorfunktion auch im
  153. 4056 h0 sta $0900,x;graphikmodus funktioniert
  154. 4058 dex
  155. 4059 bpl h0
  156. 4060 lda #$12;zeilenabstand graphikkonform setzen
  157. 4070 sta $86
  158. 4080 sta $e9fe;graphikendeanforderung ruecksetzen
  159. 4090 sta $e9ff;graphikmodus anzeigen
  160. 4100 rts;zurueck zu sa0
  161. 4150 h1 ldx $e9ff;graphik eingeschaltet
  162. 4160 cpx #$12
  163. 4170 beq h2;ja, dann graphikbehandlung
  164. 4180 jmp out;sonst ausgabe wie gewohnt
  165. 4190 h2 cmp #$80;ists ein steuerzeichen
  166. 4195 and #$7f;msb loeschen
  167. 4200 bcs h3;als graphikzeichen verarbeiten
  168. 4210 cmp #$0e;chr$(14)
  169. 4220 beq h4;ja, dann graphikende beantragen
  170. 4230 cmp #$0f;chr$(15)
  171. 4240 bne h5;nein, dann weiter untersuchen
  172. 4250 h4 sta $e9fe;graphikende anfordern
  173. 4260 lda #$24
  174. 4270 sta $86;zeilenabstand korrigieren
  175. 4280 rts;weiter mit sa0
  176. 4300 h6 lda $82;zeile abschliessen
  177. 4310 beq h7;zahl der spalten durch 8 teilbar
  178. 4320 h8 lda #$00;sonst auf ganzes zeichen ergaenzen
  179. 4330 jsr h3
  180. 4340 lda $82
  181. 4350 bne h8
  182. 4360 h7 sta $80;register ruecksetzen
  183. 4370 sta $81
  184. 4380 sta $83
  185. 4390 tya
  186. 4400 jsr out;zeilenende signalisieren
  187. 4410 lda $e9fe
  188. 4420 cmp #$12;graphikende angefordert
  189. 4430 beq h9;nein, dann zurueck zu sa0
  190. 4435 h22 lda $7a;sonst warten, bis mechanik fertig
  191. 4436 bne h22
  192. 4440 lda port;und zeichensatz-rom einschalten
  193. 4450 ora #$10
  194. 4460 sta port
  195. 4470 lda #$24
  196. 4480 sta $e9ff
  197. 4490 h9 rts;zurueck zu sa0
  198. 4500 h5 jsr $efa2;auf terminator untersuchen
  199. 4510 tay
  200. 4520 h20 bcs h6;zeile ausdrucken falls terminator
  201. 4530 cmp #$1a;chr$(26) = zeichen mehrfach drucken
  202. 4540 bne h10;nein, dann weiter untersuchen
  203. 4550 jsr in;anzahl holen
  204. 4560 sta $85
  205. 4570 jsr in;zeichen holen
  206. 4573 lda $64
  207. 4574 bpl h12;ende, falls nicht gueltiges zeichen
  208. 4575 and #$7f;msb loeschen
  209. 4580 sta $7f
  210. 4590 h11 lda $7f
  211. 4600 jsr h3;zeichen so oft ausgeben wie verlangt
  212. 4610 dec $85
  213. 4620 bne h11
  214. 4630 h12 rts;zurueck zu sa0
  215. 4640 h10 cmp #$0c;chr$(12) = formfeed
  216. 4650 bne h12;zurueck zu sa0 falls nicht
  217. 4660 tay
  218. 4670 jmp h6;sonst zeile beenden
  219. 4700 h3 ldx #$00;graphikzeichenverarbeitung
  220. 4705 stx $84
  221. 4710 ldx #$08
  222. 4715 h13 ror a;zeichen umdrehen
  223. 4720 rol $84
  224. 4725 dex
  225. 4730 bne h13
  226. 4735 h23 lda $81
  227. 4740 cmp #$e4;erstes zeichen
  228. 4745 bcs h14
  229. 4750 adc #$e4;ja dann adressoffset addieren
  230. 4755 sta $81
  231. 4760 h14 lda $84
  232. 4762 ldx #$00
  233. 4765 sta ($80,x);zeichen in ram
  234. 4770 inc $80
  235. 4775 bne h15
  236. 4780 inc $81
  237. 4785 h15 dec $82
  238. 4790 bpl h12;jeweils 8 zeichen geben eins im puffer
  239. 4800 lda #$4f;80 zeichen pro zeile
  240. 4802 ldx $65
  241. 4805 cpx #$0e;sa 14
  242. 4807 beq h21
  243. 4810 lda #$3b;sonst nur 60 zeichen
  244. 4812 h21 cmp $83
  245. 4815 bcs h16;zeilenende nicht erreicht
  246. 4817 ldy #$0d
  247. 4818 lda #$00
  248. 4819 sta $82
  249. 4820 jsr h7;zeile abschliessen
  250. 4821 h24 lda $7a
  251. 4822 bne h24;ausdruck abwarten
  252. 4823 jmp h23;neue zeile beginnen
  253. 4825 h16 ldx #$07;zaehler 0..7 ruecksetzen
  254. 4830 stx $82
  255. 4835 lda $83;umrechnung zeichensatzplatz in ascii
  256. 4840 cmp #$20
  257. 4845 bcs h18
  258. 4850 adc #$40
  259. 4855 bcc h19
  260. 4860 h18 cmp #$40
  261. 4865 bcc h19
  262. 4870 adc #$1f
  263. 4875 h19 inc $83
  264. 4880 jmp out;ascii code in puffer
  265. 5000 *= $7f00;*** sa15 hexdumpmode ***
  266. 5010 g1 jsr in
  267. 5020 bvs g6
  268. 5030 j7 jsr $efa2; ** _ ** einsprung hier !
  269. 5040 bcc g1;auf terminator warten
  270. 5050 g4 jsr in;zeichen holen
  271. 5060 bvs g2;falls sa gewechselt, diese ausgeben
  272. 5070 g5 lda $64;sonst zeichen laden,
  273. 5080 sta $80;sichern,
  274. 5090 jsr g3;hexcode berechnen und ausgeben
  275. 5100 jmp g4;naechstes zeichen
  276. 5110 g2 lda #$0d;neue sa mit
  277. 5120 jsr out;neuer zeile
  278. 5130 lda #$2a;und sternchen wuerdigen
  279. 5140 jsr out
  280. 5150 clv
  281. 5160 lda $65;sa laden,
  282. 5170 sta $80;sichern,
  283. 5180 jsr g3;hexcode berechnen und ausgeben
  284. 5190 jmp g5;zugehoeriges zeichen hinterher
  285. 5200 g6 jmp $ee80;terminator error
  286. 5210 g3 lsr a;highnibble berechnen
  287. 5220 lsr a
  288. 5230 lsr a
  289. 5240 lsr a
  290. 5250 jsr g7;und ausgeben
  291. 5260 lda $80;lownibble berechnen
  292. 5270 and #$0f
  293. 5280 jsr g7;und ausgeben
  294. 5290 lda #$20;leerzeichen
  295. 5300 jsr out;zweimal
  296. 5310 jsr out;zwischen zwei bytes ausgeben
  297. 5320 rts
  298. 5330 g7 clc;nibble in hexadezimaldarstellung
  299. 5340 adc #$30;verkleiden
  300. 5350 cmp #$3a
  301. 5360 bcc g8
  302. 5370 adc #$06
  303. 5380 g8 jsr out;und in druckerpuffer druecken
  304. 5390 rts
  305. 8000 *= $7ff1;resetvektor
  306. 8010 lda #$ff;reset einsprung
  307. 8020 sta port;alle portpins auf high
  308. 8030 sta $0242;alle portpins als ausgaenge
  309. 8040 jmp $ea31;zum alten einsprung
  310. 8050 .word $fff1;neuer resetvektor
  311.